from datetime import datetime

# 判断ID是否满足要求
def is_value_id():
    while True:
        id = input("请输入ID:")
        if len(id) > 8:
            print("ID长度不能超过8位")
        elif any(not(c.isdigit() or c.isalpha() or c == '_') for c in id):
            print("ID只能由数字、字母、下划线组成")
        else:
            return id
    
# 判断EMAIL地址是否满足要求
def is_value_email():
    while True:
        email = input("请输入EMAIL地址:")
        if email.count('@') != 1:
            print("邮箱地址中的@有且只有一个")
            continue
        # 获得@左右的内容
        local, domain = email.split('@')
        if not local or not domain:
            print("邮箱地址中本地部分和域名不能为空")
            continue
        if '.' not in email or '.' == email[len(email) - 1]:
            print("邮箱地址中要有顶级域名")
            continue
        return email
    
# 判断身份证号是否符合要求
def is_value_id_card():
    while True:
        IDcard = input("请输入身份证号:")
        if len(IDcard) != 18:
            print("身份证号不能少于18")
            continue
        front17 = any(n.isdigit() for n in IDcard[: 17])
        last = IDcard[17].isdigit() or IDcard[17].upper() == 'X'
        if not front17 or not last:
            print("输入的身份证号有问题")
            continue
        # 日期验证
        try:
            datetime.strptime(IDcard[6:14], "%Y%m%d")
        except ValueError:
            print("错误：身份证号中的出生日期无效，请重新输入。")
            continue
        return IDcard
    
# 判断姓名是否符合条件
def is_value_name():
    while True:
        name = input("请输入姓名：")
        if len(name) > 4:
            print("姓名长度不能超过四位")
            continue
        if any( not "\u4e00" <= char <= "\u9fff" for char in name):
            print("姓名只能是中文")
        return name

# 获得用户的id,email地址,身份证号,姓名
id_value = is_value_id()
email_value = is_value_email()
idcare_value = is_value_id_card()
name_value = is_value_name()

# 获得性别
val = int(idcare_value[16]) % 2
gender = '男' if val == 1 else '女'

# 输出全部信息
print(f"ID:{id_value}\nEMAIL地址:{email_value}\n身份证号:{idcare_value}\n姓名:{name_value}\n性别:{gender}")